home *** CD-ROM | disk | FTP | other *** search
/ Power Programmierung / Power-Programmierung (Tewi)(1994).iso / magazine / progjour / 1991 / 02 / vtree / sourcer.lst < prev    next >
File List  |  1991-01-06  |  13KB  |  309 lines

  1.       vtree.lst       (C) Copyright Charles Petzold, 1     Sourcer Listing v3.13     6-Jan-91   2:36 pm   Page 1
  2.  
  3.   
  4.                 PAGE  59,132
  5.   
  6.                 ;██████████████████████████████████████████████████████████████████████████
  7.                 ;██                                         ██
  8.                 ;██                    VTREE                         ██
  9.                 ;██                                         ██
  10.                 ;██      Created:   1-Nov-86                             ██
  11.                 ;██      Version:                                 ██
  12.                 ;██      Passes:    5           Analysis Options on: QRS                 ██
  13.                 ;██      (C) Copyright Charles Petzold, 1985Invalid disk dr             ██
  14.                 ;██                                         ██
  15.                 ;██████████████████████████████████████████████████████████████████████████
  16.   
  17.                 .err     Target    Assembler set to NONE, re-assembly not recomended
  18.   
  19.      = 005C            data_1e        equ    5Ch            ; (70A1:005C=0)
  20.      = 0080            data_2e        equ    80h            ; (70A1:0080=0)
  21.      = 0095            data_3e        equ    95h            ; (70A1:0095=0)
  22.      = 02FC            data_13e    equ    2FCh            ; (70A1:02FC=0)
  23.   
  24.                 seg_a        segment    byte public
  25.                         assume    cs:seg_a, ds:seg_a
  26.   
  27.   
  28.                         org    100h
  29.   
  30.                 vtree        proc    far
  31.   
  32. 70A1:0100            start:
  33. 70A1:0100  EB 5F                jmp    short loc_1        ; (0161)
  34. 70A1:0102  90                    db    90h
  35. 70A1:0103  00            data_4        db    0            ;  xref 70A1:018E, 01AD, 02B9
  36. 70A1:0104  3A                    db    3Ah
  37. 70A1:0105  5C 2A 2E 2A 00            db    '\*.*', 0
  38. 70A1:010A  28 43 29 20 43 6F    copyright    db    '(C) Copyright Charles Petzold, 1'
  39. 70A1:0110  70 79 72 69 67 68
  40. 70A1:0116  74 20 43 68 61 72
  41. 70A1:011C  6C 65 73 20 50 65
  42. 70A1:0122  74 7A 6F 6C 64 2C
  43. 70A1:0128  20 31
  44. 70A1:012A  39 38 35 49 6E 76            db    '985Invalid disk dr'
  45. 70A1:0130  61 6C 69 64 20 64
  46. 70A1:0136  69 73 6B 20 64 72
  47. 70A1:013C  69 76 65 24                db    'ive$'
  48. 70A1:0140  52 65 71 75 69 72            db    'Requires DOS 2.0 +$'
  49. 70A1:0146  65 73 20 44 4F 53
  50. 70A1:014C  20 32 2E 30 20 2B
  51. 70A1:0152  24
  52. 70A1:0153  00            data_7        db    0            ;  xref 70A1:01A0, 0293, 02E4
  53. 70A1:0154  0000            data_8        dw    0            ;  xref 70A1:019A, 01D8, 028F, 02A0
  54.                                         ;            02E0
  55. 70A1:0156  5C            data_9        db    5Ch            ;  xref 70A1:0287, 02D7
  56. 70A1:0157  2A 2E 2A 00                db     2Ah, 2Eh, 2Ah, 00h
  57. 70A1:015B  0106            data_10        dw    106h            ;  xref 70A1:0267, 027F, 0283, 02CF
  58.                                         ;            02D3
  59. 70A1:015D  033C            data_11        dw    33Ch            ;  xref 70A1:0192, 01C2, 0219, 0298
  60.      vtree.lst       (C) Copyright Charles Petzold, 1     Sourcer Listing v3.13     6-Jan-91   2:36 pm   Page 2
  61.  
  62.                                         ;            02E9
  63. 70A1:015F  0000            data_12        dw    0            ;  xref 70A1:020D, 027B
  64. 70A1:0161            loc_1:                        ;  xref 70A1:0100
  65. 70A1:0161  3C FF                cmp    al,0FFh
  66. 70A1:0163  75 0A                jne    loc_3            ; Jump if not equal
  67. 70A1:0165  8D 16 012D                lea    dx,cs:[12Dh]        ; Load effective addr
  68. 70A1:0169            loc_2:                        ;  xref 70A1:017B
  69. 70A1:0169  B4 09                mov    ah,9
  70. 70A1:016B  CD 21                int    21h            ; DOS Services  ah=function 09h
  71.                                         ;  display char string at ds:dx
  72. 70A1:016D  CD 20                int    20h            ; Program Terminate
  73. 70A1:016F            loc_3:                        ;  xref 70A1:0163
  74. 70A1:016F  B4 30                mov    ah,30h            ; '0'
  75. 70A1:0171  CD 21                int    21h            ; DOS Services  ah=function 30h
  76.                                         ;  get DOS version number ax
  77. 70A1:0173  3C 02                cmp    al,2
  78. 70A1:0175  73 06                jae    loc_4            ; Jump if above or =
  79. 70A1:0177  8D 16 0140                lea    dx,cs:[140h]        ; Load effective addr
  80. 70A1:017B  EB EC                jmp    short loc_2        ; (0169)
  81. 70A1:017D            loc_4:                        ;  xref 70A1:0175
  82. 70A1:017D  A0 005C                mov    al,ds:data_1e        ; (70A1:005C=0)
  83. 70A1:0180  0A C0                or    al,al            ; Zero ?
  84. 70A1:0182  75 06                jnz    loc_5            ; Jump if not zero
  85. 70A1:0184  B4 19                mov    ah,19h
  86. 70A1:0186  CD 21                int    21h            ; DOS Services  ah=function 19h
  87.                                         ;  get default drive al  (0=a:)
  88. 70A1:0188  FE C0                inc    al
  89. 70A1:018A            loc_5:                        ;  xref 70A1:0182
  90. 70A1:018A  8A D0                mov    dl,al
  91. 70A1:018C  04 40                add    al,40h            ; '@'
  92. 70A1:018E  A2 0103                mov    data_4,al        ; (70A1:0103=0)
  93. 70A1:0191  FC                    cld                ; Clear direction
  94. 70A1:0192            loc_6:                        ;  xref 70A1:029D, 02EE
  95. 70A1:0192  8B 16 015D                mov    dx,data_11        ; (70A1:015D=33Ch)
  96. 70A1:0196  B4 1A                mov    ah,1Ah
  97. 70A1:0198  CD 21                int    21h            ; DOS Services  ah=function 1Ah
  98.                                         ;  set DTA to ds:dx
  99. 70A1:019A  8B 1E 0154                mov    bx,data_8        ; (70A1:0154=0)
  100. 70A1:019E  03 DB                add    bx,bx
  101. 70A1:01A0  80 3E 0153 00            cmp    data_7,0        ; (70A1:0153=0)
  102. 70A1:01A5  75 12                jne    loc_7            ; Jump if not equal
  103. 70A1:01A7  C7 87 02FC 0000            mov    word ptr ds:data_13e[bx],0    ; (70A1:02FC=0)
  104. 70A1:01AD .BA 0103                mov    dx,offset data_4    ; (70A1:0103=0)
  105. 70A1:01B0  B9 0010                mov    cx,10h
  106. 70A1:01B3  B4 4E                mov    ah,4Eh            ; 'N'
  107. 70A1:01B5  CD 21                int    21h            ; DOS Services  ah=function 4Eh
  108.                                         ;  find 1st filenam match @ds:dx
  109. 70A1:01B7  EB 04                jmp    short loc_8        ; (01BD)
  110. 70A1:01B9            loc_7:                        ;  xref 70A1:01A5, 01CA, 01D2
  111. 70A1:01B9  B4 4F                mov    ah,4Fh            ; 'O'
  112. 70A1:01BB  CD 21                int    21h            ; DOS Services  ah=function 4Fh
  113.                                         ;  find next filename match
  114. 70A1:01BD            loc_8:                        ;  xref 70A1:01B7
  115. 70A1:01BD  73 03                jnc    loc_9            ; Jump if carry=0
  116. 70A1:01BF  E9 00DE                jmp    loc_21            ; (02A0)
  117. 70A1:01C2            loc_9:                        ;  xref 70A1:01BD
  118. 70A1:01C2  8B 36 015D                mov    si,data_11        ; (70A1:015D=33Ch)
  119.      vtree.lst       (C) Copyright Charles Petzold, 1     Sourcer Listing v3.13     6-Jan-91   2:36 pm   Page 3
  120.  
  121. 70A1:01C6  80 7C 15 10                cmp    byte ptr [si+15h],10h
  122. 70A1:01CA  75 ED                jne    loc_7            ; Jump if not equal
  123. 70A1:01CC  83 C6 1E                add    si,1Eh
  124. 70A1:01CF  80 3C 2E                cmp    byte ptr [si],2Eh    ; '.'
  125. 70A1:01D2  74 E5                je    loc_7            ; Jump if equal
  126. 70A1:01D4  FF 87 02FC                inc    word ptr ds:data_13e[bx]    ; (70A1:02FC=0)
  127. 70A1:01D8  8B 0E 0154                mov    cx,data_8        ; (70A1:0154=0)
  128. 70A1:01DC  E3 3A                jcxz    loc_15            ; Jump if cx=0
  129. 70A1:01DE  83 BF 02FC 01            cmp    word ptr ds:data_13e[bx],1    ; (70A1:02FC=0)
  130. 70A1:01E3  74 21                je    loc_13            ; Jump if equal
  131. 70A1:01E5  2B DB                sub    bx,bx
  132.   
  133. 70A1:01E7            locloop_10:                    ;  xref 70A1:0204
  134. 70A1:01E7  B0 B3                mov    al,0B3h
  135. 70A1:01E9  F7 87 02FC 8000            test    word ptr ds:data_13e[bx],8000h    ; (70A1:02FC=0)
  136. 70A1:01EF  74 02                jz    loc_11            ; Jump if zero
  137. 70A1:01F1  B0 20                mov    al,20h            ; ' '
  138. 70A1:01F3            loc_11:                        ;  xref 70A1:01EF
  139. 70A1:01F3  E8 00FD                call    sub_1            ; (02F3)
  140. 70A1:01F6  51                    push    cx
  141. 70A1:01F7  B9 0010                mov    cx,10h
  142.   
  143. 70A1:01FA            locloop_12:                    ;  xref 70A1:01FF
  144. 70A1:01FA  B0 20                mov    al,20h            ; ' '
  145. 70A1:01FC  E8 00F4                call    sub_1            ; (02F3)
  146. 70A1:01FF  E2 F9                loop    locloop_12        ; Loop if cx > 0
  147.   
  148. 70A1:0201  59                    pop    cx
  149. 70A1:0202  43                    inc    bx
  150. 70A1:0203  43                    inc    bx
  151. 70A1:0204  E2 E1                loop    locloop_10        ; Loop if cx > 0
  152.   
  153. 70A1:0206            loc_13:                        ;  xref 70A1:01E3
  154. 70A1:0206  83 BF 02FC 01            cmp    word ptr ds:data_13e[bx],1    ; (70A1:02FC=0)
  155. 70A1:020B  75 0B                jne    loc_15            ; Jump if not equal
  156. 70A1:020D  8B 0E 015F                mov    cx,data_12        ; (70A1:015F=0)
  157.   
  158. 70A1:0211            locloop_14:                    ;  xref 70A1:0216
  159. 70A1:0211  B0 C4                mov    al,0C4h
  160. 70A1:0213  E8 00DD                call    sub_1            ; (02F3)
  161. 70A1:0216  E2 F9                loop    locloop_14        ; Loop if cx > 0
  162.   
  163. 70A1:0218            loc_15:                        ;  xref 70A1:01DC, 020B
  164. 70A1:0218  56                    push    si
  165. 70A1:0219  8B 36 015D                mov    si,data_11        ; (70A1:015D=33Ch)
  166. 70A1:021D .BF 0080                mov    di,data_2e        ; (70A1:0080=0)
  167. 70A1:0220  8B D7                mov    dx,di
  168. 70A1:0222  B9 002B                mov    cx,2Bh
  169. 70A1:0225  F3/ A4                rep    movsb            ; Rep when cx >0 Mov [si] to es:[di]
  170. 70A1:0227  5E                    pop    si
  171. 70A1:0228  B4 1A                mov    ah,1Ah
  172. 70A1:022A  CD 21                int    21h            ; DOS Services  ah=function 1Ah
  173.                                         ;  set DTA to ds:dx
  174. 70A1:022C            loc_16:                        ;  xref 70A1:0237
  175. 70A1:022C  B4 4F                mov    ah,4Fh            ; 'O'
  176. 70A1:022E  CD 21                int    21h            ; DOS Services  ah=function 4Fh
  177.                                         ;  find next filename match
  178.      vtree.lst       (C) Copyright Charles Petzold, 1     Sourcer Listing v3.13     6-Jan-91   2:36 pm   Page 4
  179.  
  180. 70A1:0230  72 14                jc    loc_17            ; Jump if carry Set
  181. 70A1:0232  80 3E 0095 10            cmp    byte ptr ds:data_3e,10h    ; (70A1:0095=0)
  182. 70A1:0237  75 F3                jne    loc_16            ; Jump if not equal
  183. 70A1:0239  B0 C2                mov    al,0C2h
  184. 70A1:023B  83 BF 02FC 01            cmp    word ptr ds:data_13e[bx],1    ; (70A1:02FC=0)
  185. 70A1:0240  74 15                je    loc_18            ; Jump if equal
  186. 70A1:0242  B0 C3                mov    al,0C3h
  187. 70A1:0244  EB 11                jmp    short loc_18        ; (0257)
  188. 70A1:0246            loc_17:                        ;  xref 70A1:0230
  189. 70A1:0246  B0 C4                mov    al,0C4h
  190. 70A1:0248  83 BF 02FC 01            cmp    word ptr ds:data_13e[bx],1    ; (70A1:02FC=0)
  191. 70A1:024D  74 08                je    loc_18            ; Jump if equal
  192. 70A1:024F  B0 C0                mov    al,0C0h
  193. 70A1:0251  81 8F 02FC 8000            or    word ptr ds:data_13e[bx],8000h    ; (70A1:02FC=0)
  194. 70A1:0257            loc_18:                        ;  xref 70A1:0240, 0244, 024D
  195. 70A1:0257  E8 0099                call    sub_1            ; (02F3)
  196. 70A1:025A  B0 C4                mov    al,0C4h
  197. 70A1:025C  E8 0094                call    sub_1            ; (02F3)
  198. 70A1:025F  B0 20                mov    al,20h            ; ' '
  199. 70A1:0261  E8 008F                call    sub_1            ; (02F3)
  200. 70A1:0264  B9 000D                mov    cx,0Dh
  201. 70A1:0267  8B 3E 015B                mov    di,data_10        ; (70A1:015B=106h)
  202.   
  203. 70A1:026B            locloop_19:                    ;  xref 70A1:0274
  204. 70A1:026B  AC                    lodsb                ; String [si] to al
  205. 70A1:026C  0A C0                or    al,al            ; Zero ?
  206. 70A1:026E  74 06                jz    loc_20            ; Jump if zero
  207. 70A1:0270  AA                    stosb                ; Store al to es:[di]
  208. 70A1:0271  E8 007F                call    sub_1            ; (02F3)
  209. 70A1:0274  E2 F5                loop    locloop_19        ; Loop if cx > 0
  210.   
  211. 70A1:0276            loc_20:                        ;  xref 70A1:026E
  212. 70A1:0276  B0 20                mov    al,20h            ; ' '
  213. 70A1:0278  E8 0078                call    sub_1            ; (02F3)
  214. 70A1:027B  89 0E 015F                mov    data_12,cx        ; (70A1:015F=0)
  215. 70A1:027F  89 3E 015B                mov    data_10,di        ; (70A1:015B=106h)
  216. 70A1:0283  FF 06 015B                inc    data_10            ; (70A1:015B=106h)
  217. 70A1:0287 .BE 0156                mov    si,offset data_9    ; (70A1:0156=5Ch)
  218. 70A1:028A  B9 0005                mov    cx,5
  219. 70A1:028D  F3/ A4                rep    movsb            ; Rep when cx >0 Mov [si] to es:[di]
  220. 70A1:028F  FF 06 0154                inc    data_8            ; (70A1:0154=0)
  221. 70A1:0293  C6 06 0153 00            mov    data_7,0        ; (70A1:0153=0)
  222. 70A1:0298  83 06 015D 2B            add    data_11,2Bh        ; (70A1:015D=33Ch)
  223. 70A1:029D  E9 FEF2                jmp    loc_6            ; (0192)
  224. 70A1:02A0            loc_21:                        ;  xref 70A1:01BF
  225. 70A1:02A0  83 3E 0154 00            cmp    data_8,0        ; (70A1:0154=0)
  226. 70A1:02A5  74 4A                je    loc_23            ; Jump if equal
  227. 70A1:02A7  F7 87 02FC 7FFF            test    word ptr ds:data_13e[bx],7FFFh    ; (70A1:02FC=0)
  228. 70A1:02AD  75 0A                jnz    loc_22            ; Jump if not zero
  229. 70A1:02AF  B0 0D                mov    al,0Dh
  230. 70A1:02B1  E8 003F                call    sub_1            ; (02F3)
  231. 70A1:02B4  B0 0A                mov    al,0Ah
  232. 70A1:02B6  E8 003A                call    sub_1            ; (02F3)
  233. 70A1:02B9            loc_22:                        ;  xref 70A1:02AD
  234. 70A1:02B9 .BF 0103                mov    di,offset data_4    ; (70A1:0103=0)
  235. 70A1:02BC  B9 0046                mov    cx,46h
  236. 70A1:02BF  B0 00                mov    al,0
  237.      vtree.lst       (C) Copyright Charles Petzold, 1     Sourcer Listing v3.13     6-Jan-91   2:36 pm   Page 5
  238.  
  239. 70A1:02C1  F2/ AE                repne    scasb            ; Rep zf=0+cx >0 Scan es:[di] for al
  240. 70A1:02C3  4F                    dec    di
  241. 70A1:02C4  B9 0040                mov    cx,40h
  242. 70A1:02C7  B0 5C                mov    al,5Ch            ; '\'
  243. 70A1:02C9  FD                    std                ; Set direction flag
  244. 70A1:02CA  F2/ AE                repne    scasb            ; Rep zf=0+cx >0 Scan es:[di] for al
  245. 70A1:02CC  F2/ AE                repne    scasb            ; Rep zf=0+cx >0 Scan es:[di] for al
  246. 70A1:02CE  47                    inc    di
  247. 70A1:02CF  89 3E 015B                mov    data_10,di        ; (70A1:015B=106h)
  248. 70A1:02D3  FF 06 015B                inc    data_10            ; (70A1:015B=106h)
  249. 70A1:02D7 .BE 0156                mov    si,offset data_9    ; (70A1:0156=5Ch)
  250. 70A1:02DA  B9 0005                mov    cx,5
  251. 70A1:02DD  FC                    cld                ; Clear direction
  252. 70A1:02DE  F3/ A4                rep    movsb            ; Rep when cx >0 Mov [si] to es:[di]
  253. 70A1:02E0  FF 0E 0154                dec    data_8            ; (70A1:0154=0)
  254. 70A1:02E4  C6 06 0153 01            mov    data_7,1        ; (70A1:0153=0)
  255. 70A1:02E9  83 2E 015D 2B            sub    data_11,2Bh        ; (70A1:015D=33Ch)
  256. 70A1:02EE  E9 FEA1                jmp    loc_6            ; (0192)
  257. 70A1:02F1            loc_23:                        ;  xref 70A1:02A5
  258. 70A1:02F1  CD 20                int    20h            ; Program Terminate
  259.   
  260.                 vtree        endp
  261.   
  262.                 ;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
  263.                 ;                   SUBROUTINE
  264.                 ;
  265.                 ;         Called from:     70A1:01F3, 01FC, 0213, 0257, 025C, 0261, 0271
  266.                 ;                  0278, 02B1, 02B6
  267.                 ;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
  268.   
  269.                 sub_1        proc    near
  270. 70A1:02F3  52                    push    dx
  271. 70A1:02F4  8A D0                mov    dl,al
  272. 70A1:02F6  B4 02                mov    ah,2
  273. 70A1:02F8  CD 21                int    21h            ; DOS Services  ah=function 02h
  274.                                         ;  display char dl
  275. 70A1:02FA  5A                    pop    dx
  276. 70A1:02FB  C3                    retn
  277.                 sub_1        endp
  278.   
  279.   
  280.                 seg_a        ends
  281.   
  282.   
  283.   
  284.                         end    start
  285.      vtree.lst       (C) Copyright Charles Petzold, 1     Sourcer Listing v3.13     6-Jan-91   2:36 pm   Page 6
  286.  
  287.   
  288.                 ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ CROSS REFERENCE - KEY ENTRY POINTS ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  289.   
  290.                     seg:off    type       label
  291.                    ---- ----   ----   ---------------
  292.                    70A1:0100   far    start
  293.   
  294.                  ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ Interrupt Usage Synopsis ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  295.   
  296.                         Interrupt 20h :    Program Terminate
  297.                         Interrupt 21h :     display char dl
  298.                         Interrupt 21h :     display char string at ds:dx
  299.                         Interrupt 21h :     get default drive al  (0=a:)
  300.                         Interrupt 21h :     set DTA to ds:dx
  301.                         Interrupt 21h :     get DOS version number ax
  302.                         Interrupt 21h :     find 1st filenam match @ds:dx
  303.                         Interrupt 21h :     find next filename match
  304.   
  305.                  ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ I/O    Port Usage Synopsis  ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  306.   
  307.                         No I/O ports used.
  308.   
  309.